/**   
 * Copyright © 2018 eSunny Info. Tech Ltd. All rights reserved.
 * 
 * @Package: io.renren.modules.iots.utils.config 
 * @author: zhouxidong   
 * @date: 2018年5月27日 下午2:33:31 
 */
package io.renren.modules.iots.utils.config;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.renren.modules.iots.entity.IotsIoserverInfoEntity;
import io.renren.modules.iots.utils.socket.client.SocketBean;
import io.renren.modules.iots.utils.socket.client.SocketUtils;

/** 
 * @ClassName: IotsConfig 
 * @Description: 关于物联网接口服务的配置
 * @author: zhouxidong
 * @date: 2018年5月27日 下午2:33:31  
 */
public class IotsConfig {
	
	/**
	 * 日志
	 */
	private Logger logger = LoggerFactory.getLogger(getClass());
	
	/************************************************      单例模式     ************************************************/
    
    /**
     * 私有对象变量
     */
    private static final IotsConfig single = new IotsConfig();
    
    /**
     * @Title: getInstance 
     * @Description: 饿汉模式--单例（静态工厂方法）  
     * @return IotsConfig
     * @author zhouxidong
     * @date 2018年5月27日下午11:51:24
     */
    public static IotsConfig getInstance() {
        return single;
    }
	
	/************************************************      单例模式     ************************************************/
	
	/**
	 * 物联网接口服务器管理的采集代理服务
	 * 需要Web服务器向物联网接口服务发送配置信息
	 */
    private List<IotsIoserverInfoEntity> ipAndPortList = new ArrayList<IotsIoserverInfoEntity>();
    
	/**
	 * @return the ipAndPortList
	 */
	public List<IotsIoserverInfoEntity> getIpAndPortList() {
		return ipAndPortList;
	}

	/**
	 * @param ipAndPortList the ipAndPortList to set
	 */
	public void setIpAndPortList(List<IotsIoserverInfoEntity> ipAndPortList) {
		// 先将管理器清空
		SocketUtils.SOCKETBEAN_MAP.clear();
		SocketUtils.INOPERATION_SOCKETBEAN_MAP.clear();
		SocketUtils.CHANNEL_IOTPBODYUTILS_MAP.clear();
		SocketUtils.CHANNEL_MESSAGE_MAP.clear();
		// 给配置信息赋值
		this.ipAndPortList = ipAndPortList;
		// 将配置加载到管理器中
		for(IotsIoserverInfoEntity iii:this.ipAndPortList){
			try {
				new SocketBean(iii.getIpAddress().split(":")[0], Integer.valueOf(iii.getIpAddress().split(":")[1]));
			} catch (NumberFormatException | IOException e) {
				logger.error(" >> >> >> ip地址为【 "+iii.getIpAddress()+" 】的配置信息不正确！！！");
			}
		}
	}
	
	/**
	 * 心跳间隔（单位是秒）
	 * 默认心跳间隔是60秒
	 */
	public static int SEND_PALPITATE_INTERVAL = 60; 
	
	/**
	 * 服务状态topic（心跳topic）
	 */
	public static String STORAGE_SERVICESTATUS_TOPIC = null;
	
	/**
	 * 设备状态topic（心跳topic）
	 */
	public static String STORAGE_DEVICESTATUS_TOPIC = null;
	
	/**
	 * 采集的数据存放的topic
	 */
	public static String STORAGE_MSG_TOPIC = null;
	
	
}
